/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador.Service.Ventas;


import Controlador.Bean.Log.Log;
import Controlador.Bean.Ventas.Devolucion;
import Controlador.Bean.Ventas.LineaDevolucion;
import Controlador.Bean.Ventas.DevolucionBusqueda;
import Data.config.SessionFac;
import gui.General.Main;
import org.apache.ibatis.session.SqlSession;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 *
 * @author Luis Enrique
 */
public class ServicioDevolucion {
    
    java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Date fecha= new Date();
    String f=sdf.format(fecha);
    
    private ServicioDevolucion() {};
    
    static private ServicioDevolucion servicioDevolucion=null; 
		   
    public static ServicioDevolucion getInstance(){    
        if(servicioDevolucion==null) servicioDevolucion= new ServicioDevolucion();
        return servicioDevolucion;
    }
      
    //INICIO DEVOLUCION
    public String getCodDevolucion(){
        String codigo;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            codigo = sqlsesion.selectOne("Data.Ventas.ServicioDevolucion.getCodDevolucion");			
            sqlsesion.close();
        }
        if(codigo!=null){
            int cod= Integer.parseInt(codigo.substring(3))+1;
            String defecto= "000000";
            String temp= defecto.substring(0, defecto.length()-String.valueOf(cod).length()).concat(String.valueOf(cod));
            return codigo.substring(0,3).concat(temp);
        }
        else
             return ("DEV000001");
    }
    
    public synchronized void registrarDevolucion(Devolucion dev){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.insert("Data.Ventas.ServicioDevolucion.insertDevolucion",dev);
            sqlsesion.commit();
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTDEVLC","Registrar Devolución",f);
        }
    }
    
        public ArrayList<DevolucionBusqueda> seleccionarAllDevs(){
        ArrayList<DevolucionBusqueda> devs;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<DevolucionBusqueda> temp = (List)sqlsesion.selectList("Data.Ventas.ServicioDevolucion.getAllDevs");			
            devs = new ArrayList(temp);
            sqlsesion.close();
            //Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTDEVLC","Seleccionar Devoluciones",f);
        }
        return devs;
    }
    
    public ArrayList<DevolucionBusqueda> seleccionarDevs (DevolucionBusqueda devBusqueda){
        ArrayList<DevolucionBusqueda> docs;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<DevolucionBusqueda> temp = (List)sqlsesion.selectList("Data.Ventas.ServicioDevolucion.getDevs",devBusqueda);			
            docs = new ArrayList(temp);
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTDEVLC","Seleccionar Devoluciones",f);
        }
        return docs;
    }
    
    //FIN DEVOLUCION
    
    //INICIO LINEAS DEVOLUCION
    
    public synchronized void registrarLineaDevolucion(ArrayList<LineaDevolucion> lineas,String codigo){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            for(int i=0;i<lineas.size();i++){
                lineas.get(i).setIdDevolucion(codigo);
                sqlsesion.insert("Data.Ventas.ServicioDevolucion.insertLineaDevolucion",lineas.get(i));
            }        
            sqlsesion.commit();
            sqlsesion.close();
        }
    }
    
    public ArrayList<LineaDevolucion> seleccionarLineasDev(String codigo){
        ArrayList<LineaDevolucion> lineas;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<LineaDevolucion> temp = (List)sqlsesion.selectList("Data.Ventas.ServicioDevolucion.getLineasDev",codigo);			
            lineas = new ArrayList(temp);
            sqlsesion.close();
        }
        return lineas;    
    }
            
    //FIN LINEAS DEVOLUCION
    
}
